package com.utils.sm;

import cn.hutool.core.util.RandomUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;

import java.util.Base64;

/**
 * @author SZYYYFPT003
 * @data 2023/02/07
 */
public class AesUtils {

    private AesUtils() {
    }

    private static final int RANDOM_LEN = 16;

    /**
     * 解密
     *
     * @param key        Aes Key
     * @param iv         偏移量
     * @param ciphertext 加密的文本
     * @return 原文
     */
    public static String decrypt(String key, String iv, String ciphertext) {
        AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
        return SecureStorage.getString(aes.decrypt(ciphertext));
    }



    /**
     * 加密
     *
     * @param key  Aes Key
     * @param iv   偏移量
     * @param data 原文
     * @return 加密的文本
     */
    public static String encrypt(String key, String iv, String data) {
        AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
        byte[] encrypt = aes.encrypt(data);
        return Base64.getEncoder().encodeToString(encrypt);
    }

    /**
     * 用于生成AES的key和iv
     *
     * @return
     */
    public static String getRandomKey() {
        return RandomUtil.randomString(RANDOM_LEN);
    }


}
